home *** CD-ROM | disk | FTP | other *** search
- uses crt,dos;
-
-
- { GERA.PAS - Global search utility to find and delete files. }
- {- drive not specified - uses the current }
- {- always starts at the root directory and searches every }
- { directory below it. }
- { C.V. Rutherford }
- { Public domain 12/28/93 }
-
-
-
- type
- PathRecPTR = ^PathRecord;
- PathRecord = record
- RDir: PathStr;
- Next: PathRecPTR;
- end;
-
- var
- CurTop,
- TempPTR: PathRecPTR; { Pointer to path references }
- FilesFound : Boolean; { end of utility display }
-
- procedure CheckAborted( ch : char );
- begin
- if ch in [#27,^C] then
- begin
- writeln(#08,'... User abort !');
- HALT(0);
- end;
- end;
-
- { PushDir/PopDir/ClearDir }
- { are used to save and restore directories during search }
-
- procedure PushDir( Rdir : PathStr );
- begin
- New( TempPTR );
- TempPTR^.RDir:= RDir;
- TempPTR^.Next:= NIL;
- if CurTop = Nil then
- CurTop := TempPTR
- else
- begin
- TempPTR^.Next := CurTop;
- CurTop := TempPTR;
- end;
- end;
-
-
- procedure PopDir(Var RDir : string );
- begin
- if CurTop <> NIL then
- begin
- TempPTR := CurTop;
- CurTop := CurTop^.Next;
- RDir := TempPTR^.RDir;
- Dispose( TempPTR );
- TempPTR := NIL;
- end;
- end;
-
-
- procedure ClearDir;
- begin
- while CurTop <> NIL do
- begin
- TempPTR := CurTop;
- CurTop := CurTop^.Next;
- FreeMem( TempPTR, sizeof(PathRecord ));
- TempPTR := NIL;
- end;
- end;
-
-
- procedure GetDir( PathN : string );
- var
- f : searchrec;
-
- begin
- findfirst(PathN+'*.*', directory,f);
- while doserror = 0 do
- begin
- if (f.attr and directory) = directory then
- begin
- if (f.name <> '.') and (f.name <> '..') then
- pushdir( PathN +f.name+'\');
- end;
- findnext(f);
- end;
- end;
-
-
- procedure EraseFile( Source : string );
- var
- F: file;
- ErrorCode : word;
- ch : char;
-
- begin
- write('Delete: ', Source+' [N]',#08+#08 );
- ch := Upcase( Readkey );
- if ch = 'Y' then
- begin
- write('Y');
- Assign(F, Source);
- {$I-} Reset(F); {$I+}
- ErrorCode := IOResult;
- if errorCode = 0 then
- begin
- Close(F);
- {$I-} Erase(F); {$I+}
- ErrorCode := IOResult
- end;
- if ErrorCode <> 0 then
- write('] ', '... File Access denied');
- end
- else
- CheckAborted( ch );
- writeln;
- end;
-
-
- procedure GetFiles( PathN, FName : string );
- var
- f : searchrec;
-
- begin
- findfirst(PathN+FName, anyfile,f);
-
- while keypressed do CheckAborted( Readkey ); { check for user abort }
-
- { 18 the only error we should get since we read the directory once before }
- { indicating no more file found }
-
- while doserror <> 18 do
- begin
- if (F.attr and directory) <> Directory then
- begin
- erasefile(PathN+f.name); (* ERASE REFERENCE *)
- (* writeln(PathN+F.Name); FIND REFERENCE *)
- FilesFound := TRUE;
- end;
- findnext(f);
- end;
- end;
-
-
- procedure GlobalErase(Pname, mask : string );
- begin
- pushdir(Pname); { Push the root directory }
- while curtop <> NIL do
- begin
- popdir( pname ); { get directory from list }
- getdir( pname ); { get its subdirectories }
- write('*',#13); {* provide an indicator }
- getfiles(pname, mask); { get directory files }
- write('-',#13); {* provide an indicator }
- end;
- write(' ',#13); {* clear the indicator }
- end;
-
- var
- Dir: DirStr;
- Name: NameStr;
- Ext: ExtStr;
-
- begin
- CheckBreak := FALSE; { use our abort }
- FilesFound := FALSE;
- if paramcount > 0 then
- begin
- FSplit(Paramstr(1), Dir, Name, Ext);
- Dir := fexpand(Dir); { Expand to get drive if not }
- { specified }
- Dir := Copy(Dir,1,1)+':\'; { Get drive or default drive }
-
- writeln;
- writeln('Global Erase.. '+Dir+name+Ext);
-
- if ( Name='') or (Ext='') or (Ext='.') then
- writeln('Invalid filename.. ?' )
- else
- begin
- GlobalErase( Dir, Name+Ext );
- if not FilesFound then
- writeln(Name+Ext+' not found ?');
- end;
- end
- else
- writeln('Filename Not Specified.. ?');
- cleardir;
- end.
-